package com.hsurosy.hsuchain.nft.datasource.sharding.strategy;

/**
 * 默认分表策略
 *
 * @Author Hsu琛君珩
 * @Date 2024-10-04 19:19
 * @Description
 * @Version: v1.0.0
 */
public class DefaultShardingTableStrategy implements ShardingTableStrategy {

    /**
     * 默认构造函数
     */
    public DefaultShardingTableStrategy() {
    }

    /**
     * 根据外部ID和表数量来获取分表索引
     *
     * @param externalId 外部ID
     * @param tableCount 表数量
     * @return 分表索引
     */
    @Override
    public int getTable(String externalId, int tableCount) {
        // 获取外部ID的哈希值
        int hashCode = externalId.hashCode();
        // 取哈希值的绝对值并对表数量取模，得到分表索引
        return (int) Math.abs((long) hashCode) % tableCount;
        //  性能优化建议：可以优化成使用位运算方式，如下所示
        //  return (int) Math.abs((long) hashCode) & (tableCount - 1);
        //  该方式利用了位运算的高效性，参考 HashMap 的 hash 方法进行优化
    }
}
